import request from '@/config/axios'
import type { Dayjs } from 'dayjs';

/** RRD数据点 */
export interface RrdDataPoint {
  timestamp: number;        // 时间戳
  value: number;           // 数值，可能为NaN
  valid?: boolean;         // 是否有效（非NaN）
}

/** RRD查询参数 */
export interface RrdQueryParams {
  deviceIp: string;        // 设备IP
  rrdFile: string;         // RRD文件名
  startTime?: string;      // 开始时间，默认 now-1h
  endTime?: string;        // 结束时间，默认 now
}

/** RRD查询结果 */
export interface RrdQueryResult {
  success: boolean;        // 是否成功
  message: string;         // 消息
  dataPoints: RrdDataPoint[]; // 数据点列表
  queryParams: RrdQueryParams; // 查询参数
  totalPoints: number;     // 总数据点数
  validPoints: number;     // 有效数据点数
}

/** 设备RRD文件信息 */
export interface DeviceRrdFiles {
  deviceIp: string;        // 设备IP
  files: string[];         // RRD文件列表
  count: number;           // 文件数量
  available: boolean;      // 设备是否可用
}

/** 数据统计信息 */
export interface RrdDataStats {
  min: number;            // 最小值
  max: number;            // 最大值
  average: number;        // 平均值
  sum: number;            // 总和
  minFormatted: string;   // 格式化最小值
  maxFormatted: string;   // 格式化最大值
  averageFormatted: string; // 格式化平均值
}

/** 批量查询结果 */
export interface BatchRrdResult {
  success: boolean;        // 是否成功
  totalQueries: number;    // 总查询数
  successfulQueries: number; // 成功查询数
  failedQueries: number;   // 失败查询数
  results: RrdQueryResult[]; // 查询结果列表
}

// RRD数据查询 API
export const RrdDataApi = {
  // 查询设备RRD数据
  getRrdData: async (deviceIp: string, params?: {
    rrdFile?: string;
    startTime?: string;
    endTime?: string;
  }) => {
    return await request.get<RrdQueryResult>({ 
      url: `/business/rrd/data/${deviceIp}`, 
      params 
    })
  },

  // 使用JSON body查询RRD数据
  queryRrdData: async (data: RrdQueryParams) => {
    return await request.post<RrdQueryResult>({ 
      url: `/business/rrd/data`, 
      data 
    })
  },

  // 获取设备可用的RRD文件列表
  getRrdFiles: async (deviceIp: string) => {
    return await request.get<DeviceRrdFiles>({ 
      url: `/business/rrd/files/${deviceIp}` 
    })
  },
   // 查询多列RRD数据
   getMultiColumnRrdData: async (deviceIp, params) => {
    return await request.get({ 
      url: `/business/rrd/data/${deviceIp}`, 
      params 
    })
  },

  // 查询ICMP性能数据
  getIcmpData: async (deviceIp, params) => {
    return await request.get({ 
      url: `/business/rrd/icmp/${deviceIp}`, 
      params 
    })
  },

  // 查询端口统计数据
  getPortStats: async (deviceIp, portId, params) => {
    return await request.get({ 
      url: `/business/rrd/port-stats/${deviceIp}`, 
      params: { portId, ...params }
    })
  },

  // 获取指定列数据
  getColumnData: async (deviceIp, columnName, params) => {
    return await request.get({ 
      url: `/business/rrd/data/${deviceIp}/column/${columnName}`, 
      params 
    })
  },

  // 获取有效数据点（过滤NaN值）
  getValidRrdData: async (deviceIp: string, params?: {
    rrdFile?: string;
    startTime?: string;
    endTime?: string;
  }) => {
    return await request.get<{
      success: boolean;
      deviceIp: string;
      rrdFile: string;
      totalPoints: number;
      validPoints: number;
      data: RrdDataPoint[];
      timeRange: string;
    }>({ 
      url: `/business/rrd/data/${deviceIp}/valid`, 
      params 
    })
  },

  // 检查设备是否可用
  checkDeviceStatus: async (deviceIp: string) => {
    return await request.get<{
      deviceIp: string;
      available: boolean;
      message: string;
    }>({ 
      url: `/business/rrd/devices/${deviceIp}/status` 
    })
  },

  // 批量查询多个设备的数据
  getBatchRrdData: async (data: RrdQueryParams[]) => {
    return await request.post<BatchRrdResult>({ 
      url: `/business/rrd/batch-data`, 
      data 
    })
  },

  // 获取数据统计信息
  getDataStats: async (deviceIp: string, params?: {
    rrdFile?: string;
    startTime?: string;
    endTime?: string;
  }) => {
    return await request.get<{
      success: boolean;
      deviceIp: string;
      rrdFile: string;
      timeRange: string;
      totalPoints: number;
      validPoints: number;
      stats: RrdDataStats;
    }>({ 
      url: `/business/rrd/data/${deviceIp}/stats`, 
      params 
    })
  },

  // 导出RRD数据为Excel
  exportRrdData: async (deviceIp: string, params?: {
    rrdFile?: string;
    startTime?: string;
    endTime?: string;
  }) => {
    return await request.download({ 
      url: `/business/rrd/data/${deviceIp}/export`, 
      params 
    })
  },
}